package br.com.mkmts.view.controller.menu.produtos;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;

import br.com.mkmts.business.CategoriaBO;
import br.com.mkmts.business.EstoqueBO;
import br.com.mkmts.business.ProdutoBO;
import br.com.mkmts.dto.CategoriaDTO;
import br.com.mkmts.dto.ProdutoDTO;
import br.com.mkmts.model.produtos.CategoriaEntity;
import br.com.mkmts.model.produtos.ProdutoEntity;
import br.com.mkmts.view.controller.AbstractModelBean;
import br.com.mkmts.view.controller.menu.produtos.vo.ProdutoVO;

@ManagedBean
@SessionScoped
public class EstoqueBean extends AbstractModelBean implements Serializable{

	private static final long serialVersionUID = -7041383649713983949L;
	
	private final String TELA_CATALOGO_MK = "/content/m-produtos/listarEstoque";
	
	@ManagedProperty(value = "#{produtoBOImpl}")
	private ProdutoBO produtoBO = null;
	
	@ManagedProperty(value = "#{estoqueBOImpl}")
	private EstoqueBO estoqueBO = null;


	@ManagedProperty(value = "#{categoriaBOImpl}")
	private CategoriaBO categoriaBO = null;

	private List<CategoriaDTO> comboCategoria;
	
	
/*********************************************
		CAMPOS E METODOS TELA CATALOGO	
**********************************************/
	private ProdutoVO produtoVo;
	private ProdutoDTO produtoDto;
	private ProdutoDTO produtoSelecionado;
	private List<ProdutoDTO> listaProduto;
	private String codMkFiltro;
	private String nomeProdutoFiltro;
	private boolean estoqueFiltro;
	private List<Integer> filtroCategoria;
	private String codProdutoDisponibilidade;
	private BigDecimal valorTotalEstoqueLbl;
	
	@Override
	public String iniciarTela() {
		limparCamposFiltro();
		carregarComboCategoria();
		carregarProdutosEstoque();
		produtoVo = new ProdutoVO();
		
		return TELA_CATALOGO_MK;
	}
	
	@Override
	public void limparCamposFiltro() {
		codMkFiltro = null;
		nomeProdutoFiltro = null;
		filtroCategoria = null;
		estoqueFiltro = false;
		produtoDto = new ProdutoDTO();
		produtoDto.setCodProduto(new ProdutoEntity());
		produtoDto.getCodProduto().setCodCategoria(new CategoriaEntity());
	}
	
	@Override
	public String pesquisarFiltro() {
		listaProduto = estoqueBO.buscarProdutosEstoquePorFiltro(codMkFiltro, nomeProdutoFiltro, filtroCategoria, true);
		calcularValorTotalEstoque();
		return "";
	}
	
	public void carregarProdutosEstoque(){
		listaProduto = estoqueBO.buscarProdutosEstoquePorFiltro(null, null, null, true);
		calcularValorTotalEstoque();
	}	
	
	public String btnLimparFiltroPesquisa(){
		limparCamposFiltro();
		carregarProdutosEstoque();
		return "";
	}
	
	private void carregarComboCategoria(){
		comboCategoria = categoriaBO.listarCategorias();
	}
	private void calcularValorTotalEstoque(){
		valorTotalEstoqueLbl = BigDecimal.ZERO;
		for (int i = 0; i < listaProduto.size(); i++) {
			valorTotalEstoqueLbl = valorTotalEstoqueLbl.add(listaProduto.get(i).getValorTotalProdutoEstoque());
		}
	}

	/** GET E SET **/

	public ProdutoBO getProdutoBO() {
		return produtoBO;
	}

	public void setProdutoBO(ProdutoBO produtoBO) {
		this.produtoBO = produtoBO;
	}

	public CategoriaBO getCategoriaBO() {
		return categoriaBO;
	}

	public void setCategoriaBO(CategoriaBO categoriaBO) {
		this.categoriaBO = categoriaBO;
	}

	public List<CategoriaDTO> getComboCategoria() {
		return comboCategoria;
	}

	public void setComboCategoria(List<CategoriaDTO> comboCategoria) {
		this.comboCategoria = comboCategoria;
	}

	public EstoqueBO getEstoqueBO() {
		return estoqueBO;
	}
	
	public void setEstoqueBO(EstoqueBO estoqueBO) {
		this.estoqueBO = estoqueBO;
	}

	public ProdutoVO getProdutoVo() {
		return produtoVo;
	}

	public void setProdutoVo(ProdutoVO produtoVo) {
		this.produtoVo = produtoVo;
	}

	public ProdutoDTO getProdutoSelecionado() {
		return produtoSelecionado;
	}

	public void setProdutoSelecionado(ProdutoDTO produtoSelecionado) {
		this.produtoSelecionado = produtoSelecionado;
	}

	public List<ProdutoDTO> getListaProduto() {
		return listaProduto;
	}

	public void setListaProduto(List<ProdutoDTO> listaProduto) {
		this.listaProduto = listaProduto;
	}

	public String getCodMkFiltro() {
		return codMkFiltro;
	}

	public void setCodMkFiltro(String codMkFiltro) {
		this.codMkFiltro = codMkFiltro;
	}

	public String getNomeProdutoFiltro() {
		return nomeProdutoFiltro;
	}

	public void setNomeProdutoFiltro(String nomeProdutoFiltro) {
		this.nomeProdutoFiltro = nomeProdutoFiltro;
	}

	public boolean isEstoqueFiltro() {
		return estoqueFiltro;
	}

	public void setEstoqueFiltro(boolean estoqueFiltro) {
		this.estoqueFiltro = estoqueFiltro;
	}

	public List<Integer> getFiltroCategoria() {
		return filtroCategoria;
	}

	public void setFiltroCategoria(List<Integer> filtroCategoria) {
		this.filtroCategoria = filtroCategoria;
	}

	public String getCodProdutoDisponibilidade() {
		return codProdutoDisponibilidade;
	}

	public void setCodProdutoDisponibilidade(String codProdutoDisponibilidade) {
		this.codProdutoDisponibilidade = codProdutoDisponibilidade;
	}

	public ProdutoDTO getProdutoDto() {
		return produtoDto;
	}

	public void setProdutoDto(ProdutoDTO produtoDto) {
		this.produtoDto = produtoDto;
	}

	public BigDecimal getValorTotalEstoqueLbl() {
		return valorTotalEstoqueLbl;
	}

	public void setValorTotalEstoqueLbl(BigDecimal valorTotalEstoqueLbl) {
		this.valorTotalEstoqueLbl = valorTotalEstoqueLbl;
	}

}
